Soundcard / Headset auf dem Huawei Matebook D16 (i7)

 · 4 min read
 · Stefan Hellmann
Last updated: June 03, 2024

Seit ich mein Matebook habe, gab es immer wieder Probleme, dass angeschlossene Kopfhörer nicht funktioniert haben. Meistens kam der Sound über die Kopfhörer und die Lautsprecher.

Zwischenzeitlich hatte ich eine Lösung, dass ich per Script die Augabe umschalten konnte. Damit konnte man leben, war aber auch nicht sehr komfortabel. Schuld daran ist wohl eine "besondere" Belegung der Pins im hda Modul.

Aber fangen wir von vorne an. Bei dem Notebook handelt es sich um ein Huawei Matebook D16 mit dem Intel Core i7-12700H. Als Soundcard wird folgendes genutzt:

00:1f.3 Multimedia audio controller [0401]: Intel Corporation Alder Lake PCH-P High Definition Audio Controller [8086:51c8] (rev 01)
        Subsystem: Huawei Technologies Co., Ltd. Device [19e5:3e58]

Für die Soundcard wird folgendes Modul geladen:

snd-hda-intel

Mit Hilfe des Tools hdajackretask konnte ich die Pin Zuordnung passend setzen und mir auch eine passende Config Datei für das modprobe laden:

/etc/modprobe.d/hda-jack-retask.conf

options snd-hda-intel patch=hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw

Das Firmware File sieht dann wie folgt aus:

/usr/lib/firmware/hda-jack-retask.fw

[codec]
0x14f11f87 0x19e5327a 0

[pincfg]
0x16 0x0321403f
0x17 0x91170110
0x18 0x40f001f0
0x19 0x03a19020
0x1a 0x40f001f0
0x21 0x40f001f0

[model]
auto

Die Pin Config wird dann wie folgt angepasst:

echo "auto" > /sys/class/sound/hwC0D0/modelname
echo "0x16 0x0321403f" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x17 0x91170110" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x18 0x40f001f0" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x19 0x03a19020" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x1a 0x40f001f0" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x21 0x40f001f0" > /sys/class/sound/hwC0D0/user_pin_configs
echo 1 > /sys/class/sound/hwC0D0/reconfig

Momentan habe ich Kernel 6.9.6-arch1-1 unter Arch Linux am laufen. Mit den oben genannten Einstellungen funktioniert das ganze dann ohne zusätzliches Script.

Hier das ganze noch mal als rundum sorglos copy & paste Script (unbedingt als root ausführen):

echo "[codec]" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x14f11f87 0x19e5327a 0" > /usr/lib/firmware/hda-jack-retask.fw
echo "" > /usr/lib/firmware/hda-jack-retask.fw
echo "[pincfg]" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x16 0x0321403f" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x17 0x91170110" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x18 0x40f001f0" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x19 0x03a19020" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x1a 0x40f001f0" > /usr/lib/firmware/hda-jack-retask.fw
echo "0x21 0x40f001f0" > /usr/lib/firmware/hda-jack-retask.fw
echo "" > /usr/lib/firmware/hda-jack-retask.fw
echo "[model]" > /usr/lib/firmware/hda-jack-retask.fw
echo "auto" > /usr/lib/firmware/hda-jack-retask.fw
echo "options snd-hda-intel patch=hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw,hda-jack-retask.fw" > /etc/modprobe.d/hda-jack-retask.conf
echo "auto" > /sys/class/sound/hwC0D0/modelname
echo "0x16 0x0321403f" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x17 0x91170110" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x18 0x40f001f0" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x19 0x03a19020" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x1a 0x40f001f0" > /sys/class/sound/hwC0D0/user_pin_configs
echo "0x21 0x40f001f0" > /sys/class/sound/hwC0D0/user_pin_configs
echo 1 > /sys/class/sound/hwC0D0/reconfig